Transitive Dependency |
It occurs when there is an FD between a non-key attribute and another non-key attribute. Esta ocurre cuando existe una FD entre un atributo que no forma parte de la llave primaria y otro atributo que no pertenece a ésta. |
Third Normal Form (3NF) |
To be in 3NF, a table:
Para cumplir con 3NF, una tabla
|
Tip |
If some (or one) of the non-key attributes depend on another non-key attribute, the table is not in 3NF. Si alguno, o algunos de los atributos que no pertenecen a la llave primaria dependen de otros atributos que tampoco pertenecen a la llave primaria, la tabla no cumple con 3NF. |
Problem 1 |
Find if the bank_p table is in 3NF (proof your result). Encuentre si la tabla bank_p esta en 3NF (pruebe su resultado). |
Solution 1 |
First the table is in 1NF and in 2NF. Second, the bank_p table has a primary key (account_id) with a single attribute. Thus, all non-key attributes must be fully functionally dependent upon it. However, we have a problem with this table in that branch information is replicated for all accounts at a particular branch. This is due to the FDs upon branch: branch → address, manager_id . Thus the table is not in 3NF. Primero la tabla esta en 1NF y en 2NF. Segundo, la llave primaria de la tabla bank_p tiene un sólo atributo, account_id. De aquí sigue que todos los atributos que no forman parte de la llave primaria deben ser dependientes en forma funcional completa en la llave primaria. Sin embargo, hay un problema en la tabla ya que la información de la sucursal está replicada para todas las cuentas que se encuentran en una sucursal en particular. Esto es debido a las FDs que existen con sucursal (branch): branch → address, manager_id . Así la tabla no está en 3NF. |
Tip |
When we find a transitive dependency, those attributes that have a transitive dependency must be removed. Then a new table (consisting of these removed attributes along with the attribute upon which they are dependent) must be created. The attribute on which the dependence exists becomes the primary key for the new table and remains as a foreign key in the original table. Cuando se encuentra una dependencia transitiva, se deben remover los atributos que originan esta dependencia. Para esto se debe crear una nueva tabla la cual contiene estos atributos así como el atributo de la cual dependen éstos. El atributo del que dependen los otros atributos debe ser la llave primaria de la nueva tabla y una llave extranjera de la tabla original. |
Problem 2 |
If the bank_p table (of the previous problem) is not in 3NF, then modify the table so that it can be in 3NF. Si la tabla bank_p (del problema previo) no está en 3NF, modifique la tabla para que pueda estar. |
Solution 2 |
We must break the FD branch → address, manager_id as shown in the figure. Se debe romper la FD branch → address, manager_id como se muestra en la figura. |
Tip |
3NF is concerned with transitive dependencies between the non-key attributes. A table may still have redundancy problems in 3NF as it ignores relationships between or within candidate keys. Most database designers think that the third normal form gives a good database design. 3NF se encarga de las dependencias transitivas que no forman parte de la llave primaria. Aun cuando una tabla cumple con 3NF, ésta puede tener problemas de redundancia, la mayoría de los diseñadores de bases de datos consideran que 3NF proporciona un diseño de bases de datos bastante bueno. |
Tip |
Once all attributes in a table are part of a candidate key, it is not convenient to split the table in more tables. Una vez que en una tabla todos los atributos son llaves candidato, no es conveniente romper la tabla en otras. |
Problem 3 |
Explain when it is convenient to atomize an address (1NF) by creating the tables:
Explique cuando y cuando no se debe atomizar un domicilio (1NF). Indicando si se crean las tablas:
|
Problem 4 |
Indicate whether the following statement is true or false: After splitting the bank_p table, the new pair of tables is in 3NF. The only attributes that are replicated are the foreign keys that allow establishing the relationships between both tables. From a practical point of view, this kind of replication is necessary and cannot be removed. Diga si es cierto o falso: Después de dividir la tabla bank_p, se tiene un par de tablas en 3NF. Los únicos atributos que están replicados son las llaves extranjeras que permiten establecer la relación entre las tablas. En forma práctica, este tipo de replicación es necesaria y no puede eliminarse. |
Problem 5 |
Indicate whether the following statement is true or false: After splitting the bank_p table, if each manager can manage only one branch and it is not allowed that two branches have the same address, then there are three candidate keys: branch, address, and manager_id. Futhermore, the following FDs hold valid: branch → address, manager_id address → branch, manager_id manager_id → address, branch . Diga si es cierto o falso: Después de dividir la tabla bank_p, si cada gerente puede administrar solamente una sucursal y no se permite que dos sucursales tengan la misma dirección, entonces se tienen tres llaves candidato: branch, address y manager_id. Además se tienen las siguientes FDs: branch → address, manager_id address → branch, manager_id manager_id → address, branch . |
Problem 6 |
In what cases is a table automatically in 2NF? En qué casos una tabla se encuentra automáticamente en 2NF? |
Problem 7 |
In what cases is a table automatically in 3NF? En qué casos una tabla se encuentra automáticamente en 3NF. |
Problem 8 |
Suppose that the same course can be delivered at the same time by different professors. Suppose also that the same professor can be delivered the same class at different times.
Suponga que el mismo curso puede ser impartido a la misma hora pero por profesores distintos. Suponga también que el mismo profesor puede impartir el mismo curso a una hora diferente.
|
Problem 9 |
The table employee_x has information about each employee.
La tabla employee_x tiene información de cada empleado.
|
Tip |
The example below illustrates how it can quickly detect if a table is in 3NF or not. El ejemplo debajo indica cómo se puede detectar en forma rápida si una tabla se encuentra en 3NF o no. |
Problem 10 |
Discuss (a) when a Linking table is in 2NF, (b) when a linking table is in 3NF. Discuta (a) cuando una tabla conectora está en 2NF, (b) cuando una tabla conectadora está en 3NF. |